﻿Imports System.Text

Public Class XML_bearbeiten
    Public daten As Daten = New Daten

    Public Sub XMLReader()

        Dim XMLR As Xml.XmlReader = New Xml.XmlTextReader("Daten.xml") ' erzeugung des Readers
        With XMLR ' Es folgt das Auslesen der XML-Datei 

            ' Dim daten As Daten = New Daten



            Dim fächerAnz As Integer = 0

            Do While .Read ' Es sind noch Daten vorhanden 


                ' Welche Art von Daten liegt an? 
                Select Case .NodeType

                    ' Ein Element 
                    Case Xml.XmlNodeType.Element


                        If XMLR.Name = "Fach" Then                ' Abfrage ob es um ein Fach geht (siehe weiter unten noten)

                            'Dim fächerAnz As Integer = 1
                            Dim nameFach As String = ""
                            Dim typFach As String = ""

                            While .MoveToNextAttribute

                                If .Name = "name" Then
                                    nameFach = .Value
                                End If
                                If .Name = "typ" Then
                                    typFach = .Value
                                End If
                            End While

                            Dim Fach_k As Fächer_Class = New Fächer_Class               ' definieren eines Objektes der Fächer_Class
                            Fach_k.Fach(nameFach, typFach)                          ' Fach definieren
                            fächerAnz = fächerAnz + 1
                            daten.addFach(Fach_k)

                        End If

                        If XMLR.Name = "Note" Then

                            Dim punkte As String = ""
                            Dim datum As String = ""
                            Dim typNote As String = ""
                            Dim bem As String = ""

                            While .MoveToNextAttribute

                                If .Name = "punkte" Then
                                    punkte = .Value
                                End If
                                If .Name = "datum" Then
                                    datum = .Value
                                End If
                                If .Name = "typ" Then
                                    typNote = .Value
                                End If
                                If .Name = "bem" Then
                                    bem = .Value
                                End If
                            End While

                            Dim Note_n As Noten_Class = New Noten_Class                 ' definieren eines Objektes der Noten_Class
                            Note_n.Note(punkte, typNote, bem, datum)                ' Note erstellen

                            daten.Fächer(fächerAnz - 1).addNote(Note_n)

                            'Fach_k.addNote(Note_n)                                  ' diese Note zum Obejkt Array Fach hinzufügen damit es nicht überschrieben wird

                        End If
                End Select
            Loop                                                            ' While Schleife beginnt von vorne mit <note 

            .Close()                                                        ' XMLTextReader schließen 

        End With

    End Sub

    Public Sub XMLWriter(ByVal Daten As XML_bearbeiten)

        ' Auswahl einer Kodierungsart für die Zeichenablage 
        'Dim enc As New System.Text.UnicodeEncoding

        ' XmlTextWriter-Objekt für unsere Ausgabedatei erzeugen: 
        Dim XMLobj As Xml.XmlTextWriter = New Xml.XmlTextWriter("Daten.xml", Encoding.UTF8)

        With XMLobj

            ' Formatierung: 4er-Einzüge verwenden 
            .Formatting = Xml.Formatting.Indented
            .Indentation = 4

            ' Dann fangen wir mal an: 
            .WriteStartDocument()

            Dim i As Integer = 0
            .WriteStartElement("Notenberechner")
            For i = 0 To Daten.daten.FächerAnz - 1

                If Daten.daten.Fächer(i).name Is Nothing Then
                Else
                    .WriteStartElement("Fach")
                    .WriteAttributeString("name", Daten.daten.Fächer(i).name)
                    .WriteAttributeString("typ", Daten.daten.Fächer(i).typ)
                    Dim i1 As Integer
                    For i1 = 0 To Daten.daten.Fächer(i).notenAnz - 1

                        If Daten.daten.Fächer(i).notenArray(i1) Is Nothing Then
                        Else
                            .WriteStartElement("Note")
                            .WriteAttributeString("punkte", Daten.daten.Fächer(i).notenArray(i1).punkte)
                            .WriteAttributeString("typ", Daten.daten.Fächer(i).notenArray(i1).typ)
                            .WriteAttributeString("bem", Daten.daten.Fächer(i).notenArray(i1).bemerkung)
                            .WriteAttributeString("datum", Daten.daten.Fächer(i).notenArray(i1).datum)
                            .WriteEndElement()
                        End If

                    Next
                    .WriteEndElement()
                End If

            Next
            .WriteEndElement()
            ' ... und schließen das XML-Dokument (und die Datei) 
            .Close() ' Document 

        End With

        ' Und so sieht die Ergebnisdatei aus: 
        ' ----------------------------------- 
        '<?xml version="1.0" encoding="utf-16"?> 
        '<Personen> 
        ' <Person Titel="Dr." Name="Meyer" Vorname="Hans" /> 
        ' <Person Titel="" Name="Schmidt" Vorname="Carlos" /> 
        '</Personen> 

    End Sub
End Class
